package demo.IOInputOutput;

import java.io.*;
import java.util.Arrays;

/**
 * @Auther: hjy(lc))
 * @Date: 2022/8/15-08-15-14:10
 * @Description：demo.IOInputOutput   随机访问流
 */
/*
txt文件内容：hello world123，使用随机访问流进行内容替换，完成后文件内容为：hello briup123
 */
public class AccessStream_change {
    public static void main(String[] args) {
        File file = new File("b.txt");
        RandomAccessFile raf = null;
        ByteArrayOutputStream bos = null;
        try {
            raf = new RandomAccessFile(file,"rw");

            //使用流
            raf.seek("hello ".length());    //定位到需要写的位置，默认从头写0的位置   raf.getFilePointer()
            //写内容
            //raf.write("briup".getBytes());

            //将hello briup    -》    hello world briup
            //将world提前保存 字节数组中
            bos = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int len = -1;
            while((len = raf.read(b)) != -1){
                bos.write(b,0,len);
            }
            bos.flush();
            //定位到6的位置，写world
            raf.seek("hello ".length());
            raf.write("world ".getBytes());
            //定位到11的位置，写briup
            raf.write(bos.toByteArray());

            raf.seek(0);     //读之前需要将游标定位到你需要读取的位置（e.g.读取所有数据需定位到0）！！！
            int read;
            while((read = raf.read()) != -1){
                System.out.write(read);
            }
            System.out.flush();
            System.out.println();
            System.out.println(raf.getFilePointer());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(raf != null){
                    raf.close();
                }
                if(bos != null){
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
